package xyz.xtt.exchange.constants;

import java.util.Arrays;
import java.util.Objects;

/**
 * 表示时间等级的枚举。 每个等级都有相应的描述，表示对应的时间单位。
 * 
 * @author huqibo
 *
 */
public enum RocketMessageDelayLevelEnum {

	/** 等级 1，描述为 1 秒 */
	LEVEL_1(1, "1s"),
	/** 等级 2，描述为 5 秒 */
	LEVEL_2(2, "5s"),
	/** 等级 3，描述为 10 秒 */
	LEVEL_3(3, "10s"),
	/** 等级 4，描述为 30 秒 */
	LEVEL_4(4, "30s"),
	/** 等级 5，描述为 1 分钟 */
	LEVEL_5(5, "1m"),
	/** 等级 6，描述为 2 分钟 */
	LEVEL_6(6, "2m"),
	/** 等级 7，描述为 3 分钟 */
	LEVEL_7(7, "3m"),
	/** 等级 8，描述为 4 分钟 */
	LEVEL_8(8, "4m"),
	/** 等级 9，描述为 5 分钟 */
	LEVEL_9(9, "5m"),
	/** 等级 10，描述为 6 分钟 */
	LEVEL_10(10, "6m"),
	/** 等级 11，描述为 7 分钟 */
	LEVEL_11(11, "7m"),
	/** 等级 12，描述为 8 分钟 */
	LEVEL_12(12, "8m"),
	/** 等级 13，描述为 9 分钟 */
	LEVEL_13(13, "9m"),
	/** 等级 14，描述为 10 分钟 */
	LEVEL_14(14, "10m"),
	/** 等级 15，描述为 20 分钟 */
	LEVEL_15(15, "20m"),
	/** 等级 16，描述为 30 分钟 */
	LEVEL_16(16, "30m"),
	/** 等级 17，描述为 1 小时 */
	LEVEL_17(17, "1h"),
	/** 等级 18，描述为 2 小时 */
	LEVEL_18(18, "2h");

	/** 等级 */
	private final int level;
	/** 描述 */
	private final String desc;

	public static RocketMessageDelayLevelEnum convertDefault(int level) {
		return Arrays.asList(RocketMessageDelayLevelEnum.values()).stream()
				.filter(x -> Objects.equals(x.level(), level)).findFirst().orElse(LEVEL_16);
	}

	/**
	 * 构造方法
	 *
	 * @param level 等级
	 * @param desc  描述
	 */
	RocketMessageDelayLevelEnum(int level, String desc) {
		this.level = level;
		this.desc = desc;
	}

	/**
	 * 获取等级
	 *
	 * @return 等级
	 */
	public int level() {
		return level;
	}

	/**
	 * 获取描述
	 *
	 * @return 描述
	 */
	public String desc() {
		return desc;
	}
}
